iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
1
Modern Web

ElectronJS系列 第 5

[ Day 5 ] - 桌面小圖示(四) - 系統通知區與縮小的貓咪

  • 分享至 

  • xImage
  •  

如果昨天沒有做出來 , 可以下載 第 4 天成品 /images/emoticon/emoticon13.gif
然後用 npm start 看到許多的貓咪 cat_04


小貓很可愛 , 但是我們要認真工作時 , 他太可愛了 /images/emoticon/emoticon37.gif ,

你的同事可能看到這隻貓咪 cat_02 就開始跟你聊天

最後可能聊得太開心 , 要工作時下班鐘已打 /images/emoticon/emoticon04.gif

為了避免這種情況 , 我們認真工作時 , 只好先收起貓貓 /images/emoticon/emoticon02.gif ,

工作告一段落時 , 再將貓貓打開來 , 療育一下 /images/emoticon/emoticon24.gif

這時就需要用到 Tray ( 系統通知區 ) 完成收起 & 打開

下方來自官方文件的範例

 tray = new Tray('/path/to/my/tray_icon')
  const contextMenu = Menu.buildFromTemplate([
    { label: 'Item1', type: 'radio' },
    { label: 'Item2', type: 'radio' },
    { label: 'Item3', type: 'radio', checked: true },
    { label: 'Item4', type: 'radio' }
  ])
  tray.setToolTip('This is my application.') // 提示訊息
  tray.setContextMenu(contextMenu)   // 右鍵選單

如果對應到實際功能就是以下圖片


以下我們接續昨天的進度 , 追加 Tray ( 系統通知區 )

第一步 , 下載 tray_icon

tray_cat

第二步 , 引入 Tray 與 Menu

// main.js
const path = require('path');
+ const Tray = require('electron').Tray; // 系統通知區
+ const Menu = require('electron').Menu; // 應用程式選單

第三步 , 在 main.js 中追加 createTray 函式

// main.js
function createTray(win) {

    const iconPath = path.join(__dirname, './imgs/tray_cat.png');
    const tray = new Tray(iconPath)
    const contextMenu = Menu.buildFromTemplate([
        {
            label: '貓咪 4', click: () => {
                win.show();
                win.webContents.send('switch-cat', 4);
            }
        },
        {
            label: '貓咪 5', click: () => {
                win.show();
                win.webContents.send('switch-cat', 5);
            }
        },
        {
            label: '貓咪 6', click: () => {
                win.show();
                win.webContents.send('switch-cat', 6);
            }
        },
        {
            label: '縮小',
            click: () => win.hide() // 隱藏 桌面貓咪
        },
        {
            label: '結束',
            click: () => {
                app.isQuiting = true;
                app.quit();
            }
        }
    ])
    tray.setToolTip('這是縮小的小貓')
    tray.setContextMenu(contextMenu);

    tray.on('click', () => win.show())

    return tray;
}

第四步 , 在 app.on('ready' 區塊中使用 createTray

// main.js
app.on('ready', () => {

    const win = createWindow();
+    createTray(win);

    [1, 2, 3].map(number => {

        globalShortcut.register(`CommandOrControl+${number}`, () => {
            win.webContents.send('switch-cat', number);
            win.show();  // Shows and gives focus to the window.
        })
    })
})

第五步 , 我們可以將 BrowserWindow 預設成 hide , 之後用 Tray ( 系統通知區 ) 把它顯示出來

// main.js
const mainWindow = new BrowserWindow({
    width: 400,
    height: 420,
    webPreferences: {
        preload: path.join(__dirname, 'preload.js'),
    },
    frame: false,      // 標題列不顯示
    transparent: true, // 背景透明
    autoHideMenuBar: true, //  工具列不顯示
+    show: false,      // 不顯示 BrowserWindow
});

之後 npm start 就可以縮小與顯示貓咪們 ! haha-man

參考資料

今年小弟第一次參加 `鐵人賽` , 如文章有誤 , 請各位前輩提出指正 , 感謝  <(_ _)>

上一篇
[ Day 4 ] - 桌面小圖示(三) - 鍵盤快速鍵與更多的貓咪
下一篇
[ Day 6 ] - 桌面小圖示(五) - 用 electron-builder 打包應用程式給其他人
系列文
ElectronJS38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
King Tzeng
iT邦新手 3 級 ‧ 2020-09-07 10:07:31

/images/emoticon/emoticon32.gif

Tree iT邦新手 3 級 ‧ 2020-09-07 10:50:28 檢舉

/images/emoticon/emoticon25.gif

我要留言

立即登入留言